package page

/**
 * @Author kong
 * @Description 分页模型
 */
type Page struct {
	Total       int64 `json:"total"`       // 总数
	CurrentPage int64 `json:"_"`           // 当前页
	PageNo      int64 `json:"pageNo"`      // 页数
	PageSize    int64 `json:"pageSize"`    // 每页显示条数
	Pages       int64 `json:"pages"`       // 总页数
	HasPrevious bool  `json:"hasPrevious"` // 上一页
	HasNext     bool  `json:"hasNext"`     // 下一页
	Records     any   `json:"records"`     // 记录
}

/**
 * @Author kong
 * @Description 分页处理方法
 */
func (px *Page) Page(pageNo int64, pageSize int64, total int64) (pp *Page) {
	// 如果用户传递的小于1的数字，直接给1
	if pageNo <= 1 {
		pageNo = 1
	}
	// 如果每页显示的条数小于0，直接给1
	if pageSize <= 0 {
		pageSize = 1
	}
	// 计算总页数，如果能整除说明刚好，如果不能整除就+1，表示还有一页
	pages := total / pageSize
	if total%pageSize != 0 {
		pages = pages + 1
	}
	// 创建分页对象
	p := new(Page)
	// 页数
	p.PageNo = pageNo
	// 计算分页的起始
	p.CurrentPage = pageSize * (pageNo - 1)
	// 返回每页显示多少
	p.PageSize = pageSize
	// 返回总页数
	p.Total = total
	// 是否有下一页
	p.HasNext = pageNo < pages
	// 是否有上一些
	p.HasPrevious = pageNo > 1
	// 返回总页数
	p.Pages = pages
	// 返回分页对象
	return p
}
